package com.coffeeloversupportlibrary.coffeelover.domain.article;

import android.util.Log;

import com.coffeeloversupportlibrary.R;
import com.coffeeloversupportlibrary.coffeelover.callback.ModelCallBack;
import com.coffeeloversupportlibrary.coffeelover.domain.article.adapter.MainAdapter;
import com.coffeeloversupportlibrary.coffeelover.domain.article.entity.Article;
import com.coffeeloversupportlibrary.coffeelover.domain.article.type.ArticleCategoriesType;
import com.coffeeloversupportlibrary.coffeelover.domain.article.type.BaseType;
import com.coffeeloversupportlibrary.coffeelover.domain.article.type.PopularType;
import com.coffeeloversupportlibrary.coffeelover.domain.article.type.QuintessenceType;
import com.coffeeloversupportlibrary.coffeelover.domain.article.type.RecommendationType;
import com.coffeeloversupportlibrary.coffeelover.domain.article.type.SlideshowType;
import com.coffeeloversupportlibrary.core.base.BaseViewModel;
import com.coffeeloversupportlibrary.core.base.livadata.SingleLiveEvent;
import com.coffeeloversupportlibrary.core.data.DataRepository;

import java.util.ArrayList;
import java.util.List;

/**
 * @author puyv
 * @createTime 2021/11/6 20:09
 * @projectName CoffeeLoverSupportLibrary
 * @className ArticleViewModel.java
 * @description TODO：考虑如下问题：Model 获得并解析并适配相应数据后返回适配的文章数据 文章类型的划分应该由谁处理？
 * todo:分析 MainAdapter 持有基类型数组 数组类的每个类型持有不同类型的文章列表
 *todo:经分析不存在如上问题   BaseAdapter 持有的数组时 布局类型数组，每个布局继承自 BaseType 各自持有Article  集合也就是说在创建
 * todo:这些类型的时候需要为这些类型添加文章数组 此时便是对文章分类的时机  局部刷新问题在分析
 *
 *
 * todo:回调陷阱：切记 匿名内部类实现的方法 通常被其它类调用  在本程序代码内执行到此处直接跳过 什么时候执行 被谁执行---看谁调用
 * 解决方案：回调结束传值给它
 */


public class ArticleViewModel extends BaseViewModel<ArticleModel> {
    //非被观察数据
    private List<Article> allArticles;

    private SingleLiveEvent<MainAdapter> loadData=new SingleLiveEvent<>();

    public SingleLiveEvent<MainAdapter> getLoadData(){
        return this.loadData;
    }



    @Override
    protected void setModel() {
         mModel=new ArticleModel(DataRepository.getInstance());
    }




    public void init(){
        mModel.getAllArticle(new ModelCallBack<List<Article>, String>() {
            @Override
            public void onSuccess(List<Article> articles) {
                if(null!=articles){
                    loadData.setValue(articlesHandler(articles));
                }
            }

            @Override
            public void Failure(String s) {
                // TODO: 2021/11/22 输出错误信息
                Log.e("TAG",s);
            }
        });




        // 分类模块



        // category 请求数据应该分离  否则上面的数据和下面的数据一致  局部刷新问题的考虑 上面的请求应该抽象为一种请求
        // TODO: 2021/11/22 文章分类模块和文章主模块 数据请求分离   SingleLiveData 解决多Fragment 共享同个ViewModel s
        //todo：数据倒灌问题



//        dataSource.add(articleCategoriesType);

    }

    private MainAdapter articlesHandler(List<Article> articles){
        //不同布局持不同类型的文章集合 文章分类  1-5

        List<Article> slideShow=new ArrayList<>();
        List<Article> popular=new ArrayList<>();
        List<Article> quintessence=new ArrayList<>();
        List<Article> recommendation=new ArrayList<>();
        List<BaseType> dataSource=new ArrayList<>();

        //文章筛选
        if(null!=articles){
            for(Article article:articles){
                switch (article.getArticleType()){
                    case 1: slideShow.add(article);
                        break;
                    case 2:popular.add(article);
                        break;
                    case 3: quintessence.add(article);
                        break;
                    case 4:recommendation.add(article);
                        break;
                    case 5:recommendation.add(article);
                        break;
                }

            }
        }


        // 迭代添加具体分类文章的数量
        for(int i=1;i<2;i++){
            slideShow.addAll(slideShow);
            quintessence.addAll(quintessence);
            recommendation.addAll(recommendation);
        }
        Log.e("TAG",String.valueOf(slideShow.size()));

        //实例化布局对象
        SlideshowType slideshowType=new SlideshowType("最新文章",slideShow);
        PopularType popularType=new PopularType("热门文章",popular);
        QuintessenceType quintessenceType=new QuintessenceType("精华文章",quintessence);
        RecommendationType recommendationType=new RecommendationType("推荐文章",recommendation);



        List<String> titles = new ArrayList<>();
        titles.add("热门活动");
        titles.add("精选文章");
        titles.add("热门文章");
        titles.add("为你推荐");
        titles.add("往期精彩");
        titles.add("精华荟萃");


        ArticleCategoriesType articleCategoriesType=new ArticleCategoriesType(titles);

        dataSource.add(slideshowType);
        dataSource.add(popularType);
        dataSource.add(quintessenceType);
        dataSource.add(recommendationType);
        dataSource.add(articleCategoriesType);
        return new MainAdapter(dataSource);

    }


}